// 监听push消息 以及 后台数据回复
import store from '@/store'
import {
	getToken
} from "@/utils/commonHeader.js";
import {
	mapState
} from "vuex";

// 消息推送 应用配置(这些给后端用的)
const uniPushObj = {
	cid: "",
	AppID: "你的AppID",
	AppKey: "你的AppKey",
	AppSecret: "你的AppSecret",
	MasterSecret: "你的MasterSecret",
};

function toJSONStr1(str) {
	//全局将字符串  '{ 和  }' 替换成   {  和   }   ，主要是为了统一"个推推送消息的透传内容的格式（而安卓需要传字符串而导致不是payload不是json对象）  
	str = str.replace(/'{/g, "{").replace(/}'/g, "}");
	str = str.replace(/\"{/g, "{").replace(/}\"/g, "}");
	return str;
}
function toJSONStr2(str) { 
	//全局将属性名添加上双引号  "" 
	str = str.replace(/([\$\w]+)\s*:\"/g, function(_, $1) {
		return '"' + $1 + '":"'
	});
	//可能会出现2021-03-13 15:38:42，因此:号后面需加\"加以判断
	str = str.replace(/([\$\w]+)\s*:{/g, function(_, $1) {
		return '"' + $1 + '":{'
	});
	return str;
}
function toJSON(str) { //处理标准格式的字符串成json对象  
	return JSON.parse(str);
}
export default {
	computed: {
		...mapState(["loginInfo"]),
	},
	// 开启监听推送 
	pushListener() {
		let platform = uni.getSystemInfoSync().platform
		// 点击推送信息
		plus.push.addEventListener('click', msg => {
			//检查下是否存在token
			let token = getToken();
			console.log('push click token', token);
			console.log('platform', platform);
			console.log('push click msg', msg);

			// 会同时收到两条消息，但payload不一样
			var payload = msg.payload;
			console.log('push click payload', payload);
			if (payload.type) {
				console.log('payload.type=' + payload.type)
				let id = payload.id;
				// 流程型
				if (payload.type == 1) {
					let record = {
						myActionId: id
					}

					let pageUrl = '/application/process';
					uni.navigateTo({
						url: `${pageUrl}?record=${JSON.stringify(record)}`,
					});
				} else if (payload.type == 2) {
					let record = {
						id: id
					}
					
					let pageUrl = '/application/noticeShow';
					uni.navigateTo({
						url: `${pageUrl}?record=${JSON.stringify(record)}`,
					});
				} else if (payload.type == 6) {
					let record = {
						flowId: id
					}
					
					let pageUrl = '/application/processShow';
					uni.navigateTo({
						url: `${pageUrl}?record=${JSON.stringify(record)}`,
					});
				} else {
					// oa_message
					let record = {
						id: id
					}
					url: `/application/news/newsShowPage?record=${JSON.stringify(record)}`
				}
			}
		});
		// 透传消息
		plus.push.addEventListener('receive', msg => {
			console.log('push', 'receive', msg);
			console.log('platform', platform);
			if (platform == 'android') {
				// 如果是Android，当APP在线时，收到透传消息不会进入系统消息，需要发送本地提醒
				var payload = msg.payload;
				if (typeof(payload) == "string") {
					console.log('typeof(payload)', typeof(payload) );
					// 不能直接parse，会报错
					// payload = JSON.parse(payload);
					
					// {dept}
					console.log('payload1', payload);
					payload = payload.replace(/{dept}/g, '');
					console.log('payload2', payload);
					
					// 正常格式：{title:"请注意查看待办流程：@admin   234243324",content:"管理员请您及时处理：@admin   234243324等级：普通发起人：管理员发起时间：2021-03-13 15:38:42",payload:"{"realName":"管理员","id":"103","type":"1","title":"@admin   234243324","flowName":"@admin   234243324","flowType":"1"}"}
					payload = toJSON(toJSONStr2(toJSONStr1(payload)));
				}

				console.log('payload', payload);
				var messageTitle = payload.title;
				var messageContent = payload.content;
				console.log(JSON.stringify(payload.payload));
				plus.push.createMessage(messageContent, JSON.stringify(payload.payload), {
					cover: false,
					sound: 'system',
					title: messageTitle
				});

			} else {
				const type = msg.type
				//【APP离线】收到消息，但没有提醒（发生在一次收到多个离线消息时，只有一个有提醒，但其他的没有提醒）  
				//【APP在线】收到消息，不会触发系统消息,需要创建本地消息，但不能重复创建
				// 必须加msg.type验证去除死循环        
				if (msg.aps == null && type == "receive") {
					//创建本地消息,发送的本地消息也会被receive方法接收到，但没有type属性，且aps是null  
					plus.push.createMessage(msg.payload.content, msg.payload, {
						title: msg.payload.title
					});
				}
			}
		});
	},
	// 循环获取clientid信息,直到获取到为止
	getClientInfoLoop() {
		plus.push.getClientInfoAsync(info => {
			// 如果info不存在，或者info存在，cid不存在则再次获取cid
			if (!info || !info.clientid) {
				console.log("cid为空");
				let infoTimer = null;
				infoTimer = setInterval(function() {
					if (cid) {
						clearInterval(infoTimer); //清定时器
						uni.showModal({
							content: cid
						})
						uni.setStorageSync('cid', cid);
						uniPushObj.cid = cid
					}
				}, 50);
			} else if (info && info.clientid) {
				let cid = info.clientid;
				uni.setStorageSync('cid', cid);
				uniPushObj.cid = cid
			}
		}, function(e) {
			console.log('Failed', JSON.stringify(e));
			let pinf = plus.push.getClientInfo();
			let cid = pinf.clientid; //客户端标识 
			if (cid) {
				uni.setStorageSync('cid', cid);
				uniPushObj.cid = cid
			}
		})
	},
	/** 
	 * 向后台传送cid，绑定别名
	 */
	// passCid() {
	//   pushEscalation({
	//     "appid": uniPushObj.AppID,
	//     "cid": uniPushObj.cid
	//   }).then(response => {
	//     if (response.Code == 0) {
	//       console.log('----------> cid 绑定别名成功', response);
	//     }
	//   })
	// },
}